import { Todo, TODO_STATUS_INT, TODO_STATUS_ENUM } from '../db/entity/todo'
import { getCurrentUnix } from '../utils'

const resolvers = {
  Query: {
    todoes: async (root, args, ctx, info) => {
      try {
        const { limit, offset } = args
        const todoQuery = ctx.db.getRepository(Todo)
          .createQueryBuilder('todo')

        const count = await todoQuery.getCount()

        const todoes = await todoQuery
          .limit(limit)
          .offset(offset)
          .getMany()

        const data = todoes.map(todo => ({
          ...todo,
          status: TODO_STATUS_ENUM[todo.status]
        }))

        return {
          count,
          data,
        }
      } catch (err) {
      }
    },
  },
  Mutation: {
    createTodo: async (root, args, ctx, info) => {
      try {
        const todoRepository = ctx.db.getRepository(Todo)

        const date = getCurrentUnix()
        const todo = new Todo()
        todo.content = args.data.content
        todo.createdAt = date
        todo.updatedAt = date
        todo.status = 0

        await todoRepository.save(todo);

        return { success: true }
      } catch (err) {

      }
    },
    updateTodo: async (root, args, ctx, info) => {
      try {
        const { id, content, status } = args.data
        const todoRepository = ctx.db.getRepository(Todo)
        const todoToUpdate = await todoRepository.findOne(id)

        if (content) {
          todoToUpdate.content = content
        }
        if (status) {
          todoToUpdate.status = TODO_STATUS_INT[status]
        }
        todoToUpdate.updatedAt = getCurrentUnix();
        await todoRepository.save(todoToUpdate)

        return { success: true }
      } catch (err) {

      }
    },
  },
}

export default resolvers
